package cn.itcast.eshop.common.util;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;
import cn.itcast.eshop.common.entity.Entity;
/**
 * json工具类，
 * 处理和json相关的所有内容
 */

public class JSONUtil {

    /**
     * 把对象转化成json格式的字符串
     *
     * @param entity 指定对象
     * @return json格式的字符串
     */
    public static String entity2JSON(Object entity) {
        return JSON.toJSONString(entity);

    }
    public static String entitylist2JSON(List<?> entityList){
        return entity2JSON(entityList);
    }

    /**
     * 把json字符串转换成指定的对象
     *
     * ?泛型通配符，代表的未知任意类型，或者是Object
     * @param json 要转换的对象
     * @param clazz 指定的类型
     * @return 返回Object对象
     */
     /*public static Object JSON2Entity(String json,Class<?> clazz){
          Object obj= JSON.parseObject(json,clazz);
          return obj;
    }*/

    public static <T>T JSON2Entity(String json,Class<T> clazz){//参数传什么类型就返回什么类型，利用泛型；来做
        return   JSON.parseObject(json,clazz);
    }

    /**
     * 将json数组转换成指定类型的对象列表
     * @param json 数据
     * @param clazz  指定的类型对象
     * @param <T> 指定的类型
     * @return 对象列表
     */
    public static <T> List<T> JSON2List(String json,Class<T> clazz){
        return JSON.parseArray(json,clazz);
    }


    //测试效果
    public static void main(String[] args) {
        Entity entity = new Entity();
        entity.setId("1002");
        entity.setCreateTime("11:22");
        String json = entity2JSON(entity);
        System.out.println(json);//{"createTime":"11:22","id":"1002","isDel":"1"}
        System.out.println();
        List<Entity> entitylist =new ArrayList<>();
        entitylist.add(entity);
        String jsonlist = entitylist2JSON(entitylist);
        System.out.println(jsonlist);//[{"createTime":"11:22","id":"1002","isDel":"1"}]
        System.out.println();
        /*String jsonstr="{\"createTime\":\"13:55\",\"id\":\"1002\",\"isDel\":\"1\"}";
        Object obj=JSON2Entity(jsonstr,Entity.class);//需要的参数是json字符串和字节码文件对象
        //System.out.println(obj);这样直接输出得到的是一个地址，所以我们利用强制类型转换
        Entity e=(Entity)obj;
        System.out.println(e.getCreateTime());//13:55*/

        String jsonstr="{\"createTime\":\"14:06\",\"id\":\"1002\",\"isDel\":\"1\"}";
        Entity e=JSON2Entity(jsonstr,Entity.class);
        System.out.println(e.getCreateTime());//14:06
        System.out.println();

        String jsonarr="[{\"createTime\":\"14:11\",\"id\":\"1002\",\"isDel\":\"1\"},{\"createTime\":\"11:22\",\"id\":\"1002\",\"isDel\":\"1\"}]";
        List<Entity> el=JSON2List(jsonarr,Entity.class);
        System.out.println(el.get(0).getCreateTime());//14:11
        System.out.println(el.get(1).getCreateTime());//11:22

    }

}
